package com.gljx.shiro.passwordEncrypt;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import com.gljx.util.ResourceUtil;
import com.gljx.web.Entity.User;

/**
 * 密码加密工具
* @author LiXiang
* @date 2017年10月12日 下午3:08:55 
*
 */
@Service
public class PasswordHelper {
	
	//加密方法
    private static String algorithmName = ResourceUtil.getProper("password.algorithmName");  

	//加密迭代次数
    private static Integer hashIterations = Integer.valueOf(ResourceUtil.getProper("password.hashIterations"));  
	
	//公盐
    private static Integer publicSale = Integer.valueOf(ResourceUtil.getProper("password.publicSale"));  
    
    //默认密码
    private static String defaultPwd = ResourceUtil.getProper("password.default");
    
    /**
     * 加密
    * @param user
    * @author LiXiang  @date 2017年10月21日 上午9:04:06
     */
    public static User encryptPassword(User user) {
    	
        //user.setSalt(randomNumberGenerator.nextBytes().toHex());  
    	//System.out.println(algorithmName+","+hashIterations+","+publicSale+","+defaultPwd);
    	//如果没有密码设为默认
    	if(user.getPassword() == null|| "".equals(user.getPassword() )){
    		user.setPassword(defaultPwd);
    	}
        String newPassword = new SimpleHash(  
                algorithmName,           //加密算法  
                user.getPassword(),      //密码  
                
                ByteSource.Util.bytes(user.getCredentialsSalt()+publicSale),  //salt盐   username + salt  
                hashIterations   //迭代次数  
                ).toHex();  
  
         user.setPassword(newPassword);  
         return user;
    }  
    /**
     * 测试用
    * @param args
    * @author LiXiang  @date 2017年10月21日 上午9:04:23
     */
    public static void main(String[] args) {
    	String newPassword = new SimpleHash(  
                "sha-1",           //加密算法  
                "123456",      //密码

                ByteSource.Util.bytes("付鹏3690"+"123"),  //salt盐   username + salt
                2   //迭代次数  
                ).toHex();  //姓名+id+加盐
    	System.out.println("加密密码"+newPassword);
	}
}
